<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
  <meta name="description" content="API docs for the Completer.sync constructor from the Class Completer class from the dart:async library, for the Dart programming language.">
  <title>Completer.sync constructor - Completer class - dart:async library - Dart API</title>
  <!-- required because all the links are pseudo-absolute -->
  <base href="../..">

  <link href="https://fonts.googleapis.com/css?family=Source+Code+Pro:500,400i,400,300|Source+Sans+Pro:400,300,700" rel="stylesheet">
  <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
  <link rel="stylesheet" href="static-assets/github.css">
  <link rel="stylesheet" href="static-assets/styles.css">
  <link rel="icon" href="static-assets/favicon.png">
  
</head>

<body>

<div id="overlay-under-drawer"></div>

<header id="title">
  <button id="sidenav-left-toggle" type="button">&nbsp;</button>
  <ol class="breadcrumbs gt-separated dark hidden-xs">
    <li><a href="index.html">shake</a></li>
    <li><a href="dart-async/dart-async-library.html">dart:async</a></li>
    <li><a href="dart-async/Completer-class.html">Completer<span class="signature">&lt;<wbr><span class="type-parameter">T</span>&gt;</span></a></li>
    <li class="self-crumb">Completer.sync factory constructor</li>
  </ol>
  <div class="self-name">Completer.sync</div>
  <form class="search navbar-right" role="search">
    <input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
  </form>
</header>

<main>

  <div id="dartdoc-sidebar-left" class="col-xs-6 col-sm-3 col-md-2 sidebar sidebar-offcanvas-left">
    <header id="header-search-sidebar" class="hidden-l">
      <form class="search-sidebar" role="search">
        <input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
      </form>
    </header>
    
    <ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
      <li><a href="index.html">shake</a></li>
      <li><a href="dart-async/dart-async-library.html">dart:async</a></li>
      <li><a href="dart-async/Completer-class.html">Completer<span class="signature">&lt;<wbr><span class="type-parameter">T</span>&gt;</span></a></li>
      <li class="self-crumb">Completer.sync factory constructor</li>
    </ol>
    
    <h5>Completer class</h5>
    <ol>
      <li class="section-title"><a href="dart-async/Completer-class.html#constructors">Constructors</a></li>
      <li><a href="dart-async/Completer/Completer.html">Completer</a></li>
      <li><a href="dart-async/Completer/Completer.sync.html">sync</a></li>
    
      <li class="section-title">
        <a href="dart-async/Completer-class.html#instance-properties">Properties</a>
      </li>
      <li><a href="dart-async/Completer/future.html">future</a></li>
      <li><a href="dart-async/Completer/isCompleted.html">isCompleted</a></li>
      <li class="inherited"><a href="dart-core/Object/hashCode.html">hashCode</a></li>
      <li class="inherited"><a href="dart-core/Object/runtimeType.html">runtimeType</a></li>
    
      <li class="section-title"><a href="dart-async/Completer-class.html#instance-methods">Methods</a></li>
      <li><a href="dart-async/Completer/complete.html">complete</a></li>
      <li><a href="dart-async/Completer/completeError.html">completeError</a></li>
      <li class="inherited"><a href="dart-core/Object/noSuchMethod.html">noSuchMethod</a></li>
      <li class="inherited"><a href="dart-core/Object/toString.html">toString</a></li>
    
      <li class="section-title inherited"><a href="dart-async/Completer-class.html#operators">Operators</a></li>
      <li class="inherited"><a href="dart-core/Object/operator_equals.html">operator ==</a></li>
    
    
    
    </ol>
  </div><!--/.sidebar-offcanvas-left-->

  <div id="dartdoc-main-content" class="col-xs-12 col-sm-9 col-md-8 main-content">
      <div><h1>Completer&lt;<wbr><span class="type-parameter">T</span>&gt;.sync constructor</h1></div>

    <section class="multi-line-signature">
      
      <span class="name ">Completer&lt;<wbr><span class="type-parameter">T</span>&gt;.sync</span>(<wbr>)
    </section>

    <section class="desc markdown">
      <p>Completes the future synchronously.</p>
<p>This constructor should be avoided unless the completion of the future is
known to be the final result of another asynchronous operation. If in doubt
use the default <a href="dart-async/Completer-class.html">Completer</a> constructor.</p>
<p>Using an normal, asynchronous, completer will never give the wrong
behavior, but using a synchronous completer incorrectly can cause
otherwise correct programs to break.</p>
<p>A synchronous completer is only intended for optimizing event
propagation when one asynchronous event immediately triggers another.
It should not be used unless the calls to <a href="dart-async/Completer/complete.html">complete</a> and <a href="dart-async/Completer/completeError.html">completeError</a>
are guaranteed to occur in places where it won't break <code>Future</code> invariants.</p>
<p>Completing synchronously means that the completer's future will be
completed immediately when calling the <a href="dart-async/Completer/complete.html">complete</a> or <a href="dart-async/Completer/completeError.html">completeError</a>
method on a synchronous completer, which also calls any callbacks
registered on that future.</p>
<p>Completing synchronously must not break the rule that when you add a
callback on a future, that callback must not be called until the code
that added the callback has completed.
For that reason, a synchronous completion must only occur at the very end
(in "tail position") of another synchronous event,
because at that point, completing the future immediately is be equivalent
to returning to the event loop and completing the future in the next
microtask.</p>
<p>Example:</p>
<pre class="language-dart"><code>var completer = new Completer.sync();
// The completion is the result of the asynchronous onDone event.
// No other operation is performed after the completion. It is safe
// to use the Completer.sync constructor.
stream.listen(print, onDone: () { completer.complete("done"); });
</code></pre>
<p>Bad example. Do not use this code. Only for illustrative purposes:</p>
<pre class="language-dart"><code>var completer = new Completer.sync();
completer.future.then((_) { bar(); });
// The completion is the result of the asynchronous onDone event.
// However, there is still code executed after the completion. This
// operation is *not* safe.
stream.listen(print, onDone: () {
  completer.complete("done");
  foo();  // In this case, foo() runs after bar().
});
</code></pre>
    </section>
    
    <section class="summary source-code" id="source">
      <h2><span>Implementation</span></h2>
      <pre class="language-dart"><code class="language-dart">factory Completer.sync() =&gt; new _SyncCompleter&lt;T&gt;();</code></pre>
    </section>

  </div> <!-- /.main-content -->

  <div id="dartdoc-sidebar-right" class="col-xs-6 col-sm-6 col-md-2 sidebar sidebar-offcanvas-right">
  </div><!--/.sidebar-offcanvas-->

</main>

<footer>
  <span class="no-break">
    shake 0.1.0
  </span>

  
</footer>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="static-assets/typeahead.bundle.min.js"></script>
<script src="static-assets/highlight.pack.js"></script>
<script src="static-assets/URI.js"></script>
<script src="static-assets/script.js"></script>


</body>

</html>
